_Pragma("once");

#include <memory>
#include <vector>

#include "SonPage.h"

/**
 * 抽象的父页面
 * 可以实现除了页面指定内容的其它逻辑
 * @author lizb
 */

template <class BASE>
class ParentPage :public BASE {
public:

    ParentPage(int pageNum) : BASE(pageNum) {

    }


    /**
     * 执行逻辑 覆盖原有的按键逻辑
     *
     */
    void onKeyDown() override     {
        if (currentActivePage) {
            currentActivePage->onKeyDown();
        } else {
            super.onKeyDown();
        }
    }

    void onKeyUp() override {
        if (currentActivePage) {
            currentActivePage->onKeyUp();
        } else {
            super.onKeyUp();
        }
    }

    void onKeySet() override {
        if (currentActivePage) {
            currentActivePage->onKeySet();
        } else {
            super.onKeySet();
        }
    }


    void onKeyEnt() override {

        if (currentActivePage) {// 正在浏览下级页面，传递到下级
            currentActivePage->onKeyEnt();
        } else if (focus) {//选择模式下
            currentActivePage = sonPages.at(currentBlinkIndex);
        } else {
            super.onKeyEnt();//如果超过四条可以增加翻页功能 不在当前抽象类中实现
        }
    }


    void close() override {
        currentActivePage = null_ptr;
    }

    std::vector<SonPage> sonPages;

    /**
     * 当处于浏览子页面时当前活跃的页面
     */
    protected SonPagePtr currentActivePage;
};








